package Day19.Net;

/**
 * @version 1.0
 * @BelongsProject:IntelliJ IDEA
 * @BelongsPackage:Day19.Net
 * @Author:hyhWTX
 * @ClassName:TcpServer
 * @CreateTime:2022年-09月-28日 21:47
 * @Description: Tcp通信的服务器端
 */

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

/**
 *Tcp通信的服务器端:接收客户端的请求,读取客户端发送的数据,给客户端回与数据
 * 表示服务器的英:
 *      java.net.ServerSocket:此类实现服务器套接字。
 * 服务器端必须明确一件事情,必须的知道哪个客户端请求的服务器
 * 所以可以使用accept方法获职到请求的客广魂对象Socket
 *      成员方法:
 *          Socket accept(侦听并接受到此套接字的连接。
 * 服务器的实现步骤：
 *      1.创建服务器ServerSocket对象和系统要指定的端口号
 *      2.使用serverSocket对象中的方去accept,获取到请求的客户端对象Socket
 *      3.使用Socket对象中的方法getInputStream ()获取网络字节输入流InputStream对象:
 *      4.使用网络字节输入流InputsStream对象中的方法read,读取客户端发送的数据
 *      5.使用Socket对象中的方法getOutputStream()获收网络字节输出流outputStream对象
 *      6.使用网络字节输出流OutputStream对象中的方法write ,给客户端回写数据
 *      7.释放资源( Socket, ServerSocket )
 */

public class TcpServer {
    public static void main(String[] args) throws IOException {
        //1.创建服务器ServerSocket对象和系统要指定的端口号
        ServerSocket server = new ServerSocket(8888);
        //2.使用serverSocket对象中的方去accept,获取到请求的客户端对象Socket
        Socket socket = server.accept();
        //3.使用Socket对象中的方法getInputStream ()获取网络字节输入流InputStream对象:
        InputStream is = socket.getInputStream();
        // 4.使用网络字节输入流InputsStream对象中的方法read,读取客户端发送的数据
        byte[] bytes = new byte[1024];
        int len = is.read(bytes);
        System.out.println(new String(bytes,0,len));
        //5.使用Socket对象中的方法getOutputStream()获收网络字节输出流outputStream对象
        OutputStream os = socket.getOutputStream();
        //6.使用网络字节输出流OutputStream对象中的方法write ,给客户端回写数据
        os.write("收到谢谢".getBytes());
        //7.释放资源( Socket, ServerSocket )
        socket.close();
        server.close();
    }
}
